import { Controller } from 'egg';

class TemplateController extends Controller {

    /**
     * 获取模板列表
     */
    public async getTemplateList() {
        const { ctx } = this;
        const result = await ctx.service.templateService.getTemplateList();
        ctx.body = ctx.helper.responseSuccess('获取成功', result);
    }

    /**
     * 创建自定义模板
     */
    public async createdTemplate() {
        const { ctx, ctx: { request } } = this;
        try {
            ctx.validate({
                template_id: 'string',
                template_title: 'string',
                template_type: 'string',
                template_content: 'string',
                is_send: 'string',
            }, request.body)
        } catch (e) {
            ctx.body = ctx.helper.responseErrorParam(e.errors[0].message);
            return;
        }
        const result = await ctx.service.templateService.createdTemplate(request.body);
        ctx.body = ctx.helper.responseSuccess('创建成功', result);
    }

    /**
     * 删除自定义模板
     */
    public async deleteTemplate() {
        const { ctx, ctx: { request } } = this;
        try {
            ctx.validate({
                template_id: 'string',
            }, request.body)
        } catch (e) {
            ctx.body = ctx.helper.responseErrorParam(e.errors[0].message);
            return;
        }
        await ctx.service.templateService.deleteTemplate(request.body);
        ctx.body = ctx.helper.responseSuccess('删除成功');
    }

    /**
     * 查询自定义模板
     */
    public async searchTemplate() {
        const { ctx, ctx: { request } } = this;
        try {
            ctx.validate({
                page: 'string',
                size: 'string',
            }, request.body)
        } catch (e) {
            ctx.body = ctx.helper.responseErrorParam(e.errors[0].message);
            return;
        }
        const page = Number(request.body.page);
        const size = Number(request.body.size);
        if (!page && page <= 0) {
            ctx.body = ctx.helper.responseErrorParam('请输入规范的页码数');
            return;
        }
        if (!size && size <= 0) {
            ctx.body = ctx.helper.responseErrorParam('请输入规范的页码数');
            return;
        }
        const result = await ctx.service.templateService.searchTemplate(request.body);
        ctx.body = ctx.helper.responseSuccess('查询成功', result);
    }

    /**
     * 修改自定义模板
     */
    public async editTemplate() {
        const { ctx, ctx: { request } } = this;
        try {
            ctx.validate({
                template_id: 'string',
                template_template_id: 'string',
                template_title: 'string',
                template_type: 'string',
                template_content: 'string',
                is_send: 'string',
            }, request.body)
        } catch (e) {
            ctx.body = ctx.helper.responseErrorParam(e.errors[0].message);
            return;
        }
        const result = await ctx.service.templateService.editTemplate(request.body);
        ctx.body = ctx.helper.responseSuccess('修改成功', result);
    }

    /**
     * 查找消息历史
     */
    public async searchMessage() {
        const { ctx, ctx: { request } } = this;
        try {
            ctx.validate({
                page: 'string',
                size: 'string',
            }, request.body)
        } catch (e) {
            ctx.body = ctx.helper.responseErrorParam(e.errors[0].message);
            return;
        }
        const page = Number(request.body.page);
        const size = Number(request.body.size);
        if (!page && page <= 0) {
            ctx.body = ctx.helper.responseErrorParam('请输入规范的页码数');
            return;
        }
        if (!size && size <= 0) {
            ctx.body = ctx.helper.responseErrorParam('请输入规范的页码数');
            return;
        }
        const result = await ctx.service.templateService.searchMessage(request.body);
        ctx.body = ctx.helper.responseSuccess('查询成功', result);
    }

    /**
     * 发送消息
     */
    public async sendMessage() {
        const { ctx, ctx: { request } } = this;
        try {
            ctx.validate({
                template_id: 'string',
            }, request.body)
        } catch (e) {
            ctx.body = ctx.helper.responseErrorParam(e.errors[0].message);
            return;
        }
        const result = await ctx.service.templateService.sendMessage(request.body);
        ctx.body = ctx.helper.responseSuccess('发送成功', result);
    }

    /**
     * 发送通知
     */
    public async sendNotifications() {
        const { ctx, ctx: { request } } = this;
        try {
            ctx.validate({
                template_id: 'string',
                template_content: 'string',
                open_id: 'string'
            }, request.body)
        } catch (e) {
            ctx.body = ctx.helper.responseErrorParam(e.errors[0].message);
            return;
        }
        const result = await ctx.service.templateService.sendNotifications(request.body);
        ctx.body = ctx.helper.responseSuccess('发送结果', result);
    }

    /**
     * 接收融云聊天消息
     */
    public async acceptCloundMessage() {
        const { ctx, ctx: { request } } = this;
        await ctx.service.templateService.acceptCloundMessage(request.body);
        ctx.status = 200;
        ctx.body = { code: 1, msg: '接收成功' };
    }

    /**
     * 获取微信签名
     */
    public async getSignPackage() {

            const { ctx, ctx: { request } } = this;
            try {
                ctx.validate({
                    url: 'string',
                }, request.body)
            } catch (e) {
                ctx.body = ctx.helper.responseErrorParam(e.errors[0].message);
                return;
            }
            const result = await ctx.service.templateService.getSignPackage(request.body);
            ctx.body = ctx.helper.responseSuccess('获取成功', result);

    }
}

export default TemplateController;
